﻿// 304 序列删除.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <memory.h>

using namespace std;
/*
http://oj.daimayuan.top/course/5/problem/202
有 n个数字 a1,a2,…,an，我们要把除了 a1,an之外的其他数字删除，
删除一个数字的代价是它乘上它相邻两个还没有被删除的数字的值，请求出最小代价是多少。

输入格式
第一行一个整数 n。

接下来一行 n 个整数 a1,a2,…,an。

输出格式
一个整数，表示答案。

样例输入
5
5 6 4 2 7
样例输出
178
数据规模
对于所有数据，保证 1≤n,ai≤500。
*/

const int N = 510;
int arr[N];
long long  dp[N][N];
int n;

long long dfs(int l, int r) {
	if (r - l == 1) {
		return 0;
	}

	long long& res = dp[l][r];
	if (res != 0x3f3f3f3f3f3f3f3f) return res;

	for (int i = l + 1; i < r; i++) {
		res = min(res, dfs(l, i) + dfs(i, r)+ arr[l]*arr[i]*arr[r]);
	}

	return res;
}


int main()
{
	cin >> n;

	for (int i = 1; i <= n; i++) cin >> arr[i];
	memset(dp, 0x3f, sizeof dp);
	cout << dfs(1,n);


	return 0;
}

 